# -*- coding: utf-8 -*-
# @Time        :2025/3/14 9:14
# @Author      :文刀水寿
# @File        : 40_爬虫_scrapy_scrapyshall.py
"""
 @Description :
                什么是 scrappy shall ？
                        scrapy终端， 是一个交互终端，在未启动sipder情况下尝试以及调试爬取代码。


                        应用：
                            scrapy shell www.baidu.com

                            可直接进行response操作
"""
# yield
"""
    当当网操作：
                （1） yield
                            # 图片
                            src = scrapy.Field()
                            # 名字
                            name = scrapy.Field()
                            # 价格
                            price = scrapy.Field()
                （2） 管道封装
                    # 在爬虫文件开始前就执行的方法
                    def open_spider(self, spider):
                        self.fp = open('nook.json', 'w', encoding='utf8')
                    
                    # item就是yield后面的book对象
                    def process_item(self, item, spider):
                        # # 以下这种模式不推荐 因为每次传递一个对象 就打开一次文件 对文件的操作过于频繁  
                        # # 容易问题
                        # 
                        # 
                        # # （1）write方法必须要写以恶搞字符串， 而不能是其他类型
                        # # （2）w 方法会每一次都打开文件， 并将之前的内容覆盖
                        # with open('book.json', 'a', encoding='utf8')as sp:
                        #     sp.write(str(item))
                        
                        self.fp.write(str(item))
                        return item
                    
                    
                    # 在爬虫文件执行完之后 执行的方法
                    def close_spirder(self, spider):
                        self.fp.close()
                （3） 多条管道下载
                                并在settins中 设置管道优先级
                                class DangDangDownloadPipeline:
                                    def process_item(self, item, spider):
                                        url = "https:" + item.get("src")
                                
                                        filename = './books/' + item.get("name") + ".jpg"
                                
                                        urllib.request.urlretrieve(url=url, filename=filename)
                                
                                        return item

                （4） 多页下载
"""
